#include <iostream>
#include <vector>
#include <string>

using namespace std;

/*
现在，我们用大炮来打蚊子：蚊子分布在一个M×N格的二维平面上，每只蚊子占据一格。向该平面的任意位置发射炮弹，炮弹的杀伤范围如下示意：

  O
 OXO
  O
其中，X为炮弹落点中心，O为紧靠中心的四个有杀伤力的格子范围。若蚊子被炮弹命中（位于X格），一击毙命，若仅被杀伤（位于O格），则损失一半的生命力。也就是说，一次命中或者两次杀伤均可消灭蚊子。现在给出蚊子的分布情况以及连续k发炮弹的落点，给出每炮消灭的蚊子数。

输入格式:
第一行为两个不超过20的正整数M和N，中间空一格，表示二维平面有M行、N列。

接下来M行，每行有N个0或者#字符，其中#表示所在格子有蚊子。

接下来一行，包含一个不超过400的正整数k，表示发射炮弹的数量。

最后k行，每行包括一发炮弹的整数坐标x和y（0≤x<M，0≤y<N），之间用一个空格间隔。

输出格式:
对应输入的k发炮弹，输出共有k行，第i行即第i发炮弹消灭的蚊子数。

输入样例:
5 6
00#00#
000###
00#000
000000
00#000
2
1 2
1 4
输出样例:
0
2


0等价样例，有不中、一炮中、二炮杀    320    4    
答案错误
0 / 17    
1    二炮落空地，但周边被二次杀；二炮落同一点    312    3    
答案错误
0 / 5    
2    最大规模；炮打四边、四角；三炮击中同一目标；一炮击中半死目标    308    3    
答案错误
0 / 4    
3    最小规模    316    3    
答案正确
2 / 2    
4    布满蚊子，炮打每个点    188    4    
答案错误
0 / 2

*/

#define MAX_DIM 20
#define MAX_SHOTS 400

// 定义蚊子的状态：未受伤、受伤、死亡
#define UNHARMED '#'  // 蚊子未受伤
#define HURT '0'      // 蚊子受伤
#define DEAD ' '      // 蚊子死亡

void process_shot(char grid[MAX_DIM][MAX_DIM + 1], int x, int y, int *killed) {
    // 检查中心点
    if (grid[x][y] == UNHARMED) {
        grid[x][y] = DEAD; // 直接命中，蚊子死亡
        (*killed)++;
    } else if (grid[x][y] == HURT) {
        grid[x][y] = DEAD; // 受伤后再命中，蚊子死亡
        (*killed)++;
    }

    // 四个邻近点
    int dx[] = {-1, 1, 0, 0};
    int dy[] = {0, 0, -1, 1};
    for (int j = 0; j < 4; ++j) {
        int nx = x + dx[j];
        int ny = y + dy[j];
        if (nx >= 0 && nx < MAX_DIM && ny >= 0 && ny < MAX_DIM) {
            if (grid[nx][ny] == UNHARMED) {
                grid[nx][ny] = HURT; // 第一次受伤
                (*killed)++;
            } else if (grid[nx][ny] == HURT) {
                grid[nx][ny] = DEAD; // 第二次受伤，蚊子死亡
                (*killed)++;
            }
        }
    }
}

int main() 
{
    int M, N; // 行数和列数
    cin >> M >> N;

    vector<string> vs(M);
    for (int i = 0; i < vs.size(); i++)
        cin >> vs[i];

    for (int i = 0; i < vs.size(); i++)
        cout << vs[i] << " " << endl;

    // int K; // 炮弹数量
    // scanf("%d", &K);

    // int shots[MAX_SHOTS][2]; // 存储炮弹的坐标
    // for (int i = 0; i < K; ++i) {
    //     scanf("%d %d", &shots[i][0], &shots[i][1]);
    // }

    // for (int i = 0; i < K; ++i) {
    //     int x = shots[i][0];
    //     int y = shots[i][1];
    //     int killed = 0;

    //     process_shot(grid, x, y, &killed); // 处理一次射击

    //     printf("%d\n", killed);
    // }

    return 0;
}
